//
//  JBWOAuthViewModel.swift
//  新浪微博
//
//  Created by 季伯文 on 2017/7/2.
//  Copyright © 2017年 bowen. All rights reserved.
//

import UIKit

class JBWOAuthViewModel: NSObject {

    
    //全局访问点
    static let share: JBWOAuthViewModel = JBWOAuthViewModel()
    //从沙盒中保存用户数据的信息
    var userAccountModel: JBWUserAccountModel?
    //抽取访问令牌
    var accessToken: String?{
        
        if userAccountModel?.expires_Date?.compare(Date()) == ComparisonResult.orderedDescending {
            return userAccountModel?.access_token
        } else {
            //过期
            return nil
        }
        
        
        
    }
    //判断用户是否登录 如果token有值 就是没有过期 处于登录状态
    var isLogin:Bool{
        return accessToken != nil
    }
    
    //路径/归档
    fileprivate let file = (NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.allDomainsMask, true).last! as
        NSString).appendingPathComponent("userAccount.archiver")
   
    //重写init方法 完成userAccountModel 赋值
    override init() {
        super.init()
        //单例的init方法只会走一次 所以只在沙盒取过一次数据
        userAccountModel = getUserAccountModel()
    }

    
}

    //授权界面需要发送的请求
extension JBWOAuthViewModel {
        //请求token
    func getUserAccount(code: String,finash: @escaping (Bool)-> ()){
        
            JBWNetworkTools.share.oauthLoadUserAccount(code: code, success: { (response) in
                // 判断response是否为nil 且是否是一个字典
                guard let res = response as? [String: Any] else{
                    finash(false)
                    return
                }
                // 通过字典转模型
                let userAccountModel = JBWUserAccountModel(dict: res)
                print(userAccountModel,"字典转模型")
                // 继续请求个人信息数据
                self.getUserInfo(userAccountModel: userAccountModel,finash:finash)
            }) { (error) in
                print("发送请求1失败",error)
                finash(false)
            }
        }
        
        
        
        
        // 请求个人信息数据
        func getUserInfo(userAccountModel: JBWUserAccountModel,finash: @escaping  (Bool)-> ()){
            
            JBWNetworkTools.share.oauthLoadUserInfo(userAccountModel: userAccountModel, success: { (response) in
                // 判断response是否为nil 而且是否可以转成一个字典
                guard let res = response as? [String: Any] else{
                    finash(false)
                    return
                }
                // 直接赋值
                userAccountModel.screen_name = res["screen_name"] as? String
                userAccountModel.avatar_large = res["avatar_large"] as? String
                finash(true)
                //归档解档保存数据
                self.saveUserAccountModel(userAccountModel: userAccountModel)
            }) { (error) in
                print(error,"归档失败")
                finash(false)
            }
            
            
        }

}

//保存获取数据
extension JBWOAuthViewModel {
    
    //private 修饰过得方法或属性  当前作用域
    //fileprivate  需要在其他extension class 中调用  同时不让外界调用时使用
    //保存数据
    fileprivate func saveUserAccountModel(userAccountModel:JBWUserAccountModel){
        
        //解决单例属性第一次没有值的bug 需要手动赋值
        self.userAccountModel = userAccountModel
        NSKeyedArchiver.archiveRootObject(userAccountModel, toFile: file)
    }
    
    //获取数据/解档
    func getUserAccountModel() -> JBWUserAccountModel? {
        
        
        let result = NSKeyedUnarchiver.unarchiveObject(withFile: file) as? JBWUserAccountModel
        return result
    }

}
